import { createApp } from "vue";

import ElementPlus from "element-plus";
import "element-plus/dist/index.css";
import locale from "element-plus/es/locale/lang/zh-cn";

import "@/assets/styles/index.scss"; // global css
import mitt from "mitt";
import App from "./App";
import store from "./store";
import router from "./router";
import directive from "./directive"; // directive

// 注册指令
import plugins from "./plugins"; // plugins
import { download } from "@/utils/request";

// svg图标
import "virtual:svg-icons-register";
import SvgIcon from "@/components/SvgIcon";
import elementIcons from "@/components/SvgIcon/svgicon";

import "./permission"; // permission control
import { checkPermi } from "@/utils/permission";

import { useDict } from "@/utils/dict";
import {
  parseTime,
  resetForm,
  addDateRange,
  addDateTimeRange,
  handleTree,
  selectDictLabel,
  selectDictLabels,
} from "@/utils/resolink";

// 列表数据下拉框
import EtSelect from "@/components/EtSelect";
// 分页组件
import Pagination from "@/components/Pagination";
// 自定义表格工具组件
import RightToolbar from "@/components/RightToolbar";
// 富文本组件
import Editor from "@/components/Editor";
// 文件上传组件
import FileUpload from "@/components/FileUpload";
// 图片上传组件
import ImageUpload from "@/components/ImageUpload";
// 图片预览组件
import ImagePreview from "@/components/ImagePreview";
// 自定义树选择组件
import TreeSelect from "@/components/TreeSelect";
import UserSelect from "@/components/UserSelect";
import ProdSelect from "@/components/ProdSelect";
import DeptSelect from "@/components/ProdSelect/deptSelect";
import StoreSelect from "@/components/StoreSelect";
import BinSelect from "@/components/BinSelect";
import SearchTool from "@/components/SearchTool";
// 字典标签组件
import DictTag from "@/components/DictTag";
import SubPage from "@/components/SubPage";
import SubPageNext from "@/components/SubPageNext";

import CodeInput from "@/components/CodeInput";
import PickerInput from "@/components/PickerInput";
import Vconsole from "vconsole"; // 引入 vconsole
// 引入 form-create 组件库
import FcDesigner from '@form-create/designer';

import formCreate from '@form-create/element-ui';
const app = createApp(App);
if (import.meta.env.VITE_APP_ENV !== "production") {
  // app.use(new Vconsole());
}
// 全局方法挂载
app.config.globalProperties.useDict = useDict;
app.config.globalProperties.download = download;
app.config.globalProperties.parseTime = parseTime;
app.config.globalProperties.resetForm = resetForm;
app.config.globalProperties.handleTree = handleTree;
app.config.globalProperties.addDateRange = addDateRange;
app.config.globalProperties.addDateTimeRange = addDateTimeRange;
app.config.globalProperties.selectDictLabel = selectDictLabel;
app.config.globalProperties.selectDictLabels = selectDictLabels;
app.config.globalProperties.checkPermi = checkPermi;
app.config.globalProperties.$mitt = mitt();

// 全局组件挂载
app.component("EtSelect", EtSelect);
app.component("DictTag", DictTag);
app.component("Pagination", Pagination);
app.component("SelectTree", TreeSelect);
app.component("FileUpload", FileUpload);
app.component("ImageUpload", ImageUpload);
app.component("ImagePreview", ImagePreview);
app.component("RightToolbar", RightToolbar);
app.component("Editor", Editor);
app.component("UserSelect", UserSelect);
app.component("ProdSelect", ProdSelect);
app.component("DeptSelect", DeptSelect);
app.component("StoreSelect", StoreSelect);
app.component("BinSelect", BinSelect);
app.component("CodeInput", CodeInput);
app.component("PickerInput", PickerInput);
app.component("SearchTool", SearchTool);
app.component("SubPageNext", SubPageNext);

app.use(router);
app.use(store);
app.use(plugins);
app.use(SubPage);
app.use(SubPageNext);
app.use(elementIcons);
app.component("svg-icon", SvgIcon);
// 使用 form-create 插件
app.use(FcDesigner);
app.use(formCreate);
app.use(FcDesigner.formCreate);
directive(app);

// 使用element-plus 并且设置全局的大小
app.use(ElementPlus, {
  locale: locale,
  // 支持 large、default、small
  size: sessionStorage.getItem("size") || "default",
});

app.mount("#app");
